package metier.server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import donnees.Client;
import donnees.Commande;
import donnees.FabriqueClient;
import donnees.FabriqueCommande;
import donnees.FabriqueLigneCommande;
import donnees.FabriqueProduit;
import donnees.LigneCommande;
import donnees.Produit;

import metier.interfaces.IRemoteHistorique;

public class MetierHistorique extends UnicastRemoteObject implements
		IRemoteHistorique {

	protected MetierHistorique() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public ArrayList<Commande> getCommandesClient(Integer client)
			throws RemoteException {

		List<Integer> lesIdCommande;
		ArrayList<Commande> lesCommandes = new ArrayList<Commande>();
		try {
			lesIdCommande = FabriqueCommande.getInstance()
					.rechercherIdCommandesCLient(client);
			for (Integer cmd : lesIdCommande) {

				lesCommandes
						.add(FabriqueCommande.getInstance().rechercher(cmd));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lesCommandes;
	}

	@Override
	public ArrayList<String> getLignesDeCommande(Integer commande)
			throws RemoteException {
		List<Integer> lesIdLigneCommande;
		ArrayList<String> lesLignesCommandes = new ArrayList<String>();
		try {
			lesIdLigneCommande = FabriqueCommande.getInstance()
					.getLesIdLignesCommande(commande);

			if (lesIdLigneCommande != null) {

				LigneCommande ligneCom;
				Produit prod;
				for (Integer idCommande : lesIdLigneCommande) {
					ligneCom = FabriqueLigneCommande.getInstance().rechercher(
							idCommande);
					prod = FabriqueProduit.getInstance().rechercher(
							ligneCom.getIdProduit());
					lesLignesCommandes.add(ligneCom.getQuantite() + "x "
							+ prod.getNom() + " " + prod.getPrix() + " €");
				}
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lesLignesCommandes;
	}

	@Override
	public boolean changerAdresse(Integer id, String nom, String prenom, String numero,
			String adresse, String codepostal, String ville)
			throws RemoteException {
		boolean res = false;

		try {
			Client c = FabriqueClient.getInstance().update(id, nom, prenom, Integer.parseInt(numero),
					adresse, ville, codepostal);
			if (c != null) {
				res = true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (NumberFormatException e){			
		}
		return res;
	}

	@Override
	public Client getClient(Integer idClient) throws RemoteException {
		Client c = null;
		try {
			c = FabriqueClient.getInstance().rechercher(idClient);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return c;
	}

}
